import router from "@/router"
import { ElMessage } from "element-plus"
import {config} from "./config"

// 基础接口地址


/**
 * 通用的fetch请求封装
 * @param {string} url - 接口路径
 * @param {object} options - fetch配置项
 * @returns {Promise} - 返回请求结果
 */
const request = async (url, options = {}) => {
  try {
    // 拼接完整URL
    const fullUrl = `${config.baseUrl}${url}`

    // 设置默认请求头（JSON格式）
    const defaultOptions = {
      credentials: 'include', // 包含Cookie
      headers: {
        'Content-Type': 'application/json',
        ...(options.headers || {}), // 添加登录令牌到请求头
      },
      ...options,
    }

    // 发送请求
    const response = await fetch(fullUrl, defaultOptions)
    // 检查响应状态（fetch不会自动抛出HTTP错误状态，需手动处理）
    if (response.status === 401) {
      ElMessage.error('未授权，请重新登录')
      // 跳转到登录页，并记录当前路径（方便登录后跳转回来）
      router.push({
        path: '/',
        query: { redirect: router.currentRoute.value.fullPath }
      })
      return
    }
    if (!response.ok) {
      throw new Error(`请求失败：${response.status} ${response.statusText}`)
    }

    // 解析JSON响应（根据接口实际返回格式调整）
    const data = await response.json()
    return data
  } catch (error) {
    console.error('接口请求错误：', error)
    throw error // 抛出错误供调用方处理
  }
}

/**
 * 获取设备列表
 */
export const getEquipmentList = () => {
  return request('/list', { method: 'GET' })
}

/**
 * 删除设备
 * @param {number} id - 设备ID
 */
export const deleteEquipment = (id) => {
  return request(`/equipment/${id}`, { method: 'DELETE' })
}

/**
 * 编辑设备
 * @param {number} id - 设备ID
 * @param {object} data - 设备数据
 */
export const editEquipment = (id, data) => {
  return request(`/equipment/${id}`, {
    method: 'PUT',
    body: JSON.stringify(data), // 将数据转为JSON字符串
  })
}

export const getUserInfo = () => {
  return request(`/get-user`, {
    method: 'GET'  })
}
// 登录
export const login = (data) => {
  return request(`/login`, {
    method: 'POST',
    body: JSON.stringify(data),
    credentials: 'include',
  })
}
// 退出登录
export const logout = () => {
  return request(`/logout`, {
    method: 'POST',
  })
}
